OpenGL - Les Couleurs

Il existe plusieurs fonctions pour donner une couleur à un objet. glColor3f(); est la plus simple d'entre elles. Lorsqu'on y fait appel, tous les vertices qui la suivent seront dessiné de la couleur choisi précédement. C'est-à-dire que chaque sommets definis par glVertex3f(); seront de cette couleur. Pour aller un peu plus loin, sachant que l'on peut appeler glColor3f(); entre glBegin(); et glEnd();, si on change la couleur entre deux vertex d'une ligne, cette ligne apparaitra avec ses deux extremitées d'une couleur différente et entre les deux se sera un dégradé plutot sympa. exemple:

glBegin(GL_LINES); on fait une ligne
glColor3f(1,0,0); on applique du rouge.
glVerex3f(0,0,0); un vertex à l'origine.
glColor3f(0,1,0); on applique du vert.
glVerex3f(5,0,0); un vertex un peu plus loin.
glEnd(); On termine l'objet.

Voilà comment obtenir une ligne de couleurs degradées, allant du rouge au vert.
Les arguments de glColor3f(); sont au nombre de trois et sont des float, comme l'indique son nom. Les paramètres varis de 0 à 1. Cette fonction existe aussi en glColor3i();, glColor3d();, et glColor3ub(); etc.. (i pou int, d pour double, us pour unsigned short etc...) voir directement dans le header gl.h. Ce petit truc est aussi valable pour glVertex3f();, glVertex2i()lorsque vous travailez en 2D sur des int.

Parlons maintenant de glMaterialfv();. Cette fonction défini la couleur d'un objet lorsque vous appliquez une lumière. Nous verrons les principes de la lumière au chapitre suivant. En attendant dites vous que glColor(); c'est quand la lumière est désactivée (par défault), et glMaterialfv(); c'est quand la lumière est activée

Il existe d'autres fonctions mais avec ces deux là on peut prèsque tout faire, en tout cas pour l'instant ça nous suffit largement.

Une matière possède trois couleurs, qu'il faut définir sinon elles sont identiques et ¸a fait caca sur l'ecran. Donc pour avoir de beaux objets comme dans les photos du chapitre "forme", il faut suivre le schéma suivant:

La couleur spéculaire est la tâche lumineuse au centre de la boule.
La couleur diffuse est en fait la couleur de la boule.
Et la couleur ambiante est l'ombre qui se trouve sur les côtés.
On peut les modifier en suivant l'exemple ci-dessous.

les couleurs
float MatSpec [4] = {1.f,1.f,1.f,1.f};
float MatDiff [4] = {.9f,.5f,.5f,.98f};
float MatAmb [4] = {.3f,.3f,.3f,.8f};
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,MatSpec);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,MatDiff);
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,MatAmb);

glMaterialfv(); reçoit en argument 1 la face de l'objet, en 2 le type de matière, et en 3 un tableau de 4 paramètres (ici des floatant, si on avait appelé glMaterialiv ça aurait été un tableau d'entier).

Retour
contact: ultrafil [AT] fr.st